In the past, some communication fabric designs were established such that no mismatch existed between the data bandwidth capability of a sender and a receiver. In such designs, flow control protocols are primarily needed to manage contention for shared resources.
Also in the past, some communication fabric designs had a mismatch between the data bandwidth capability of a sender and a receiver. A sending device may have a higher data bandwidth capability than the receiving device on the same communication fabric. The sending device typically transmitted data at the sender's full data bandwidth capability to the receiver. Since the receiver was unable to maintain such a high data bandwidth, the receiver would implement local buffering to capture some data at the sender's bandwidth. The communication fabric also typically implemented a flow control protocol that allowed the receiver to notify the sender when the local buffer was nearly full, so the receiver would stop transmitting in order to avoid data loss and/or loss of communication fabric efficiency. The size of the local buffer was typically based on several concerns, including the delay and precision of the flow control, the transaction sizes of the sender, and the required sustained bandwidth of the sender and receiver. The delay in transmitting the assertion of flow control from receiver to sender increases the required buffering due to the data that is transmitted by the sender during this delay, and can be measured as the flow control delay times the sender's data bandwidth. The precision in the flow control measures how much additional data might be sent by the sender after the sender receives the assertion of flow control; for example, a packetized communication fabric typically will not stop transmission once started until the end of a packet. The sender may have transaction sizes that are larger than this precision, and the protocol may require that entire sender transactions reach the receiver atomically. In such cases, the buffering must be large enough to hold the largest sender transaction. Finally, the required sustained bandwidth (also known as throughput) of the sender/fabric/receiver connection can also impact the required buffering. In particular, any requirement that the sustained bandwidth be close to the available receiver bandwidth increases local buffering requirements to cover flow control delays and communication fabric contention. In the same way that the delay in transmission of flow control assertion requires buffering to cover extra sender data, the delay in transmission of flow control negation requires buffering to provide data to the receiver while the flow control is being transmitted to the sender and the sender then begins transmitting data to the receiver. For a shared communication fabric, contention among senders can result in significant jitter (delay uncertainty) in guaranteeing when the sender will be able to transmit to the receiver. This jitter is based upon several factors, including the arbitration algorithm among the senders and the length of time the fabric can be blocked by unrelated transmissions. In fabrics where flow control assertion blocks all transmission, this jitter can get quite large. Even in non-blocking fabrics, the fabric may be effectively blocked for the duration of one full transaction from each of the assuming a fair arbitration policy. The local buffering may typically need to be large enough to cover the amount of Receiver bandwidth that would be consumed during the largest jitter period. For Communication fabrics with these characteristics, it is not unusual to find local buffering requirements that require storage of four or more sender transactions, which may equal as much as one kilobyte of storage and which can be quite costly in terms of die area for a SOC device with several senders and receivers. If the buffer is not large enough, the full capacity of the buffer could fill up with information transmitted by the sender before the receiver could empty the buffer by processing the information, and the receiver is forced to drop any new transmitted information.